import { request } from '../utils/request'

// 设备发现API

/**
 * 发现局域网ONVIF设备
 * @returns {Promise}
 */
export const discoverDevices = () => {
  return request.post(
    '/onvif/devices/discover',
    {},
    {
      loadingText: '正在搜索设备...',
      timeout: 60000 // 60秒超时
    }
  )
}

/**
 * 根据发现的设备信息添加设备
 * @param {Object} discoveredDevice - 发现的设备信息
 * @param {string} discoveredDevice.ipAddress - IP地址
 * @param {string} discoveredDevice.manufacturer - 制造商
 * @param {string} discoveredDevice.model - 型号
 * @param {string} discoveredDevice.serialNumber - 序列号
 * @param {string} discoveredDevice.firmwareVersion - 固件版本
 * @param {string} discoveredDevice.hardwareId - 硬件ID
 * @param {string[]} discoveredDevice.scopes - 作用域列表
 * @param {string[]} discoveredDevice.xAddrs - 服务地址列表
 * @returns {Promise}
 */
export const addDiscoveredDevice = discoveredDevice => {
  return request.post('/onvif/devices/add-discovered', discoveredDevice, {
    loadingText: '正在添加设备...'
  })
}

/**
 * 根据IP地址、用户名和密码添加设备
 * @param {Object} deviceInfo - 设备信息
 * @param {string} deviceInfo.ipAddress - IP地址
 * @param {number} deviceInfo.port - 端口号
 * @param {string} deviceInfo.username - 用户名
 * @param {string} deviceInfo.password - 密码
 * @param {string} deviceInfo.customName - 自定义设备名称（可选）
 * @param {string} deviceInfo.description - 设备描述（可选）
 * @returns {Promise}
 */
export const addDeviceByIp = deviceInfo => {
  return request.post('/onvif/devices/add-by-ip', deviceInfo, {
    loadingText: '正在添加设备...'
  })
}

/**
 * 批量添加设备
 * @param {Object} batchRequest - 批量添加请求
 * @param {Array} batchRequest.devices - 设备列表
 * @param {boolean} batchRequest.ignoreConnectionFailures - 是否忽略连接失败的设备
 * @param {number} batchRequest.timeoutSeconds - 连接超时时间（秒）
 * @returns {Promise}
 */
export const batchAddDevices = batchRequest => {
  return request.post('/onvif/devices/batch-add', batchRequest, {
    loadingText: '正在批量添加设备...',
    timeout: 120000 // 2分钟超时
  })
}

/**
 * 获取设备发现历史
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.size - 页大小
 * @param {string} params.startTime - 开始时间
 * @param {string} params.endTime - 结束时间
 * @returns {Promise}
 */
export const getDiscoveryHistory = (params = {}) => {
  return request.get('/onvif/discovery/history', params)
}

/**
 * 清空发现历史
 * @returns {Promise}
 */
export const clearDiscoveryHistory = () => {
  return request.delete('/onvif/discovery/history', {
    loadingText: '正在清空历史记录...'
  })
}

/**
 * 获取发现配置
 * @returns {Promise}
 */
export const getDiscoveryConfig = () => {
  return request.get('/onvif/discovery/config')
}

/**
 * 更新发现配置
 * @param {Object} config - 发现配置
 * @param {number} config.timeout - 超时时间（秒）
 * @param {string} config.multicastAddress - 多播地址
 * @param {number} config.multicastPort - 多播端口
 * @param {boolean} config.autoDiscovery - 是否启用自动发现
 * @param {number} config.autoDiscoveryInterval - 自动发现间隔（分钟）
 * @param {string[]} config.networkInterfaces - 网络接口列表
 * @returns {Promise}
 */
export const updateDiscoveryConfig = config => {
  return request.put('/onvif/discovery/config', config, {
    loadingText: '正在更新配置...'
  })
}

/**
 * 获取网络接口列表
 * @returns {Promise}
 */
export const getNetworkInterfaces = () => {
  return request.get('/onvif/discovery/network-interfaces')
}

/**
 * 测试网络接口连通性
 * @param {string} interfaceName - 网络接口名称
 * @returns {Promise}
 */
export const testNetworkInterface = interfaceName => {
  return request.post(
    '/onvif/discovery/test-interface',
    { interfaceName },
    {
      loadingText: '正在测试网络接口...'
    }
  )
}

/**
 * 扫描指定IP范围的设备
 * @param {Object} scanConfig - 扫描配置
 * @param {string} scanConfig.startIp - 起始IP
 * @param {string} scanConfig.endIp - 结束IP
 * @param {number} scanConfig.port - 端口
 * @param {number} scanConfig.timeout - 超时时间
 * @param {number} scanConfig.threads - 线程数
 * @returns {Promise}
 */
export const scanIpRange = scanConfig => {
  return request.post('/onvif/discovery/scan-range', scanConfig, {
    loadingText: '正在扫描IP范围...',
    timeout: 300000 // 5分钟超时
  })
}

/**
 * 停止当前扫描
 * @returns {Promise}
 */
export const stopScan = () => {
  return request.post('/onvif/discovery/stop-scan', {})
}

/**
 * 获取扫描状态
 * @returns {Promise}
 */
export const getScanStatus = () => {
  return request.get(
    '/onvif/discovery/scan-status',
    {},
    {
      loading: false // 不显示加载动画
    }
  )
}

/**
 * 验证设备连接
 * @param {Object} deviceInfo - 设备信息
 * @param {string} deviceInfo.ipAddress - IP地址
 * @param {number} deviceInfo.port - 端口
 * @param {string} deviceInfo.username - 用户名
 * @param {string} deviceInfo.password - 密码
 * @returns {Promise}
 */
export const validateDevice = deviceInfo => {
  return request.post('/onvif/devices/discovery/validate', deviceInfo, {
    loadingText: '正在验证设备...'
  })
}

/**
 * 获取设备详细信息
 * @param {string} ipAddress - IP地址
 * @param {number} port - 端口
 * @returns {Promise}
 */
export const getDeviceInfo = (ipAddress, port = 80) => {
  return request.post(
    '/onvif/discovery/device-info',
    { ipAddress, port },
    {
      loadingText: '正在获取设备信息...'
    }
  )
}

/**
 * 获取设备服务列表
 * @param {string} ipAddress - IP地址
 * @param {number} port - 端口
 * @returns {Promise}
 */
export const getDeviceServices = (ipAddress, port = 80) => {
  return request.post(
    '/onvif/discovery/device-services',
    { ipAddress, port },
    {
      loadingText: '正在获取服务列表...'
    }
  )
}

/**
 * 导入设备列表
 * @param {FormData} formData - 包含设备列表文件的表单数据
 * @returns {Promise}
 */
export const importDeviceList = formData => {
  return request.upload('/onvif/discovery/import', formData, {
    loadingText: '正在导入设备列表...'
  })
}

/**
 * 导出发现的设备列表
 * @param {Object} params - 导出参数
 * @param {string} params.format - 导出格式 (csv/excel/json)
 * @returns {Promise}
 */
export const exportDiscoveredDevices = (params = {}) => {
  return request.download('/onvif/discovery/export', params, {
    loadingText: '正在导出设备列表...'
  })
}

/**
 * 获取发现统计信息
 * @returns {Promise}
 */
export const getDiscoveryStatistics = () => {
  return request.get(
    '/onvif/discovery/statistics',
    {},
    {
      loading: false
    }
  )
}

/**
 * 启动自动发现
 * @returns {Promise}
 */
export const startAutoDiscovery = () => {
  return request.post(
    '/onvif/discovery/auto/start',
    {},
    {
      loadingText: '正在启动自动发现...'
    }
  )
}

/**
 * 停止自动发现
 * @returns {Promise}
 */
export const stopAutoDiscovery = () => {
  return request.post(
    '/onvif/discovery/auto/stop',
    {},
    {
      loadingText: '正在停止自动发现...'
    }
  )
}

/**
 * 获取自动发现状态
 * @returns {Promise}
 */
export const getAutoDiscoveryStatus = () => {
  return request.get(
    '/onvif/discovery/auto/status',
    {},
    {
      loading: false
    }
  )
}

/**
 * 手动添加设备（不通过发现）
 * @param {Object} deviceInfo - 设备信息
 * @param {string} deviceInfo.name - 设备名称
 * @param {string} deviceInfo.ipAddress - IP地址
 * @param {number} deviceInfo.port - 端口
 * @param {string} deviceInfo.username - 用户名
 * @param {string} deviceInfo.password - 密码
 * @param {string} deviceInfo.manufacturer - 制造商
 * @param {string} deviceInfo.model - 型号
 * @param {string} deviceInfo.description - 描述
 * @returns {Promise}
 */
export const addManualDevice = deviceInfo => {
  return request.post('/onvif/discovery/manual-add', deviceInfo, {
    loadingText: '正在添加设备...'
  })
}

/**
 * 批量验证设备
 * @param {Object[]} devices - 设备列表
 * @returns {Promise}
 */
export const batchValidateDevices = devices => {
  return request.post(
    '/onvif/discovery/batch-validate',
    { devices },
    {
      loadingText: '正在批量验证设备...',
      timeout: 120000 // 2分钟超时
    }
  )
}

/**
 * 获取发现日志
 * @param {Object} params - 查询参数
 * @returns {Promise}
 */
export const getDiscoveryLogs = (params = {}) => {
  return request.get('/onvif/discovery/logs', params)
}

/**
 * 清空发现日志
 * @returns {Promise}
 */
export const clearDiscoveryLogs = () => {
  return request.delete('/onvif/discovery/logs', {
    loadingText: '正在清空日志...'
  })
}
